# -*- coding: utf-8 -*-

# 该文件实现变量的跨文件传递 2020-1-29
# 定义跨文件变量前需要_init() 获取不用
# 定义和获取都需要import该文件

# 根据实际需要添加了对应的函数 2020-2-9

from queue import *


def _init():
    """
    初始化
    :return: 无
    """
    global _global_dict
    _global_dict = {}


def set_value(key, value):
    """
    定义一个全局变量
    :param key: 全局变量的键
    :param value: 全局变量的值
    :return: 无
    """
    _global_dict[key] = value


def get_value(key, defValue = None):
    """
    获得一个全局变量,不存在则返回默认值
    :param key: 全局变量的键
    :param defValue: 默认值，用于不存在时返回
    :return: 返回对应键的值，不存在返回默认值
    """
    try:
        return _global_dict[key]
    except KeyError:
        return defValue

####################################################
#                 以下为自定义函数                    #
###################################################

def get_queue_value(key, defValue=None):
    """
    以队列的形式，取出队首的值，需要为Queue类型
    :param key: 变量的键
    :param defValue: 默认值，用于不存在时返回
    :return: 若全局变量为Queue类型，返回对手元素的值，不存在就返回默认值，若不是，就返回False
    """
    try:
        if isinstance(_global_dict[key], Queue):
            return _global_dict[key].get()
        else:
            return False
    except:
        return defValue

def put_queue_value(key, put_value, defValue=None):
    """
    以队列的方式，在队尾插入一个新的元素，需要全局变量为Queue型
    :param key:变量的键
    :param put_value:新插入的变量
    :param defValue:默认值
    :return:无
    """
    try:
        if isinstance(_global_dict[key], Queue):
            _global_dict[key].put(put_value)
        else:
            return False
    except:
        return defValue

def get_queue_size(key, defValue=None):
    """
    取得队列的长度
    :param key: 变量的键
    :param defValue: 默认值
    :return: 若键存在，返回队列的长度，若不存在，就返回默认值
    """
    try:
        if isinstance(_global_dict[key], Queue):
            return _global_dict[key].qsize()
        else:
            return False
    except:
        return defValue

def returnType(key):
    """
    获得对应键的变量的类型
    :param key: 变量的键
    :return: 返回变量的类型
    """
    return type(_global_dict[key])

